import { registerMicroApps, start, addGlobalUncaughtErrorHandler, setDefaultMountApp } from 'qiankun'

// 全局状态管理
let globalState = {
  user: {
    name: '主应用用户',
    role: 'admin'
  },
  theme: 'light',
  language: 'zh-CN'
}

// 导出注册子应用的方法
export function registerSubApps() {
  if (window.__QIANKUN_REGISTERED__) return;
  registerMicroApps([
    {
      name: 'tds-ec-web',
      entry: '//localhost:9092', // 子应用启动端口
      container: '#tdsec-container',
      activeRule: '/exp',
      props: {
        // 传递给子应用的数据
        getGlobalState: () => globalState,
        setGlobalState: (state) => {
          globalState = { ...globalState, ...state }
          console.log('[主应用] 全局状态已更新:', globalState)
        },
        // 主应用提供的方法
        mainAppMethods: {
          showMessage: (message) => {
            console.log('[主应用] 收到子应用消息:', message)
          },
          navigateTo: (path) => {
            window.history.pushState(null, '', path)
          }
        }
      },
    },
  ], {
    beforeLoad: [
      app => {
        console.log('[LifeCycle] before load %c%s', 'color: green;', app.name);
        // 可以在这里做一些加载前的准备工作
      },
    ],
    beforeMount: [
      app => {
        console.log('[LifeCycle] before mount %c%s', 'color: green;', app.name);
        // 可以在这里做一些挂载前的准备工作
      },
    ],
    afterMount: [
      app => {
        console.log('[LifeCycle] after mount %c%s', 'color: green;', app.name);
        // 子应用挂载完成后的处理
      },
    ],
    afterUnmount: [
      app => {
        console.log('[LifeCycle] after unmount %c%s', 'color: green;', app.name);
        // 子应用卸载后的清理工作
      },
    ],
  });
  window.__QIANKUN_REGISTERED__ = true;
  console.log('[主应用] qiankun 配置完成，子应用已注册');
}

// 导出启动qiankun的方法
export function startQiankun() {
  if (window.__QIANKUN_STARTED__) return;
  // 全局错误处理
  addGlobalUncaughtErrorHandler((event) => {
    console.error('[qiankun] 全局错误:', event);
    if (event.message && event.message.includes('fetch')) {
      console.error('[qiankun] 子应用加载失败，请检查子应用是否已启动');
    }
  });
  // 启动 qiankun
  start({
    prefetch: false, // 关闭预加载，避免不必要的资源消耗
    sandbox: {
      strictStyleIsolation: false, // 关闭严格的样式隔离
      experimentalStyleIsolation: true, // 开启实验性的样式隔离
    },
    singular: true, // 单实例模式，同时只能有一个子应用运行
    excludeAssetFilter: (assetUrl) => {
      // 排除某些资源不进行沙箱隔离
      return assetUrl.includes('localhost:9092');
    },
  });
  window.__QIANKUN_STARTED__ = true;
  console.log('[主应用] qiankun 已启动');
}

// 全局状态管理方法
export const getGlobalState = () => globalState;
export const setGlobalState = (state) => {
  globalState = { ...globalState, ...state };
  console.log('[主应用] 全局状态已更新:', globalState);
};

// 监听子应用状态变化
window.addEventListener('popstate', () => {
  console.log('[主应用] 路由变化:', window.location.pathname);
});
